package it.apiconsulting.sharem.dao;


import it.apiconsulting.sharem.controller.bean.UtenteBean;
import it.apiconsulting.sharem.model.Utente;
import it.apiconsulting.sharem.util.HibernateUtil;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.classic.Session;


public class UtenteDao extends HibernateUtil {
	
	public UtenteBean add(UtenteBean utente) {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(copyBeansUbToU(utente));
		session.getTransaction().commit();
		return utente;
	}
	public UtenteBean delete(Long id) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Utente utente = (Utente) session.load(Utente.class, id);
		if(null != utente) {
			session.delete(utente);
		}
		session.getTransaction().commit();
		return copyBeansUToUb(utente);
	}
	public UtenteBean update(UtenteBean ub) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		try {
			
			Utente utente = copyBeansUbToU(ub);
			session.saveOrUpdate(utente);
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return ub;
	}

	public List<UtenteBean> list() {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<Utente> utenti = null;
		List<UtenteBean> utentiBean = new ArrayList<UtenteBean>();
		try {
			
			Query query = session.createQuery("from Utente");
			utenti = (List<Utente>)query.list();
			for (Utente utente : utenti ) {
				utentiBean.add(copyBeansUToUb(utente));
			}
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return utentiBean;
	}
	
	public UtenteBean copyBeansUToUb(Utente utente){
		
		UtenteBean ub = new UtenteBean();
		ub.setCittaNascita(utente.getCittaNascita());
		ub.setCognome(utente.getCognome());
		ub.setDatacreazione(utente.getDatacreazione());
		ub.setId(utente.getId());
		ub.setNome(utente.getNome());
		ub.setPassword(utente.getPassword());
		ub.setPathVlc(utente.getPathVlc());
		ub.setPlaylistDefault(utente.getPlaylistDefault());
		ub.setIp(utente.getIp());
		ub.setUsername(utente.getUsername());
		ub.setPlayerAttivo(utente.getPlayerAttivo());
		ub.setLogged(utente.getLogged());
		return ub;
	}
	
	public Utente copyBeansUbToU(UtenteBean utente){
		
		Utente u = new Utente();
		u.setCittaNascita(utente.getCittaNascita());
		u.setCognome(utente.getCognome());
		u.setDatacreazione(utente.getDatacreazione());
		u.setId(utente.getId());
		u.setNome(utente.getNome());
		u.setPassword(utente.getPassword());
		u.setPathVlc(utente.getPathVlc());
		u.setPlaylistDefault(utente.getPlaylistDefault());
		u.setIp(utente.getIp());
		u.setUsername(utente.getUsername());
		u.setPlayerAttivo(utente.isPlayerAttivo());
		u.setLogged(utente.isLogged());
		return u;
	}
}
